

#ifndef __IO_H__
#define __IO_H__

#include "BSP_IO.h"

typedef struct IO_Tag IO_T;

struct IO_Tag{
	void* port;
	uint16_t pin;
};

#define IO_INIT_TABLE(port, pin)	{(void*)port, pin}
#define IO_INVALID_TABLE			{(void*)0xFFFF, 0xFFFF}

typedef enum {
	IO_Mode_OUT = GPIO_MODE_OUT_PP, 	//output
	IO_Mode_OD = GPIO_MODE_OUT_OD,		//open drain
	IO_Mode_IN = GPIO_MODE_IN_FLOATING,		//input
	IO_Mode_AIN = GPIO_MODE_AIN,
	IO_Mode_IPD = GPIO_MODE_IPD,
	IO_Mode_IPU = GPIO_MODE_IPU,
	IO_Mode_AFOD = GPIO_MODE_AF_OD,
	IO_Mode_AFPP = GPIO_MODE_AF_PP,
}IO_Mode;

void IO_Init(const IO_T* io, uint32_t mode);
void IO_Config(const IO_T* io, uint32_t mode);
void IO_Set(const IO_T* io, int state);
int IO_Get(const IO_T* io);
void IO_ExtInit(const IO_T* io, int config, void* param);
//获取一组IO的状态
uint32_t IO_MultGet(const IO_T* io, uint8_t num);
//设置一组IO的状态
void IO_MultSet(const IO_T* io, uint8_t num, uint32_t stateMap);

int IO_IsValid(const IO_T* io);


#endif



